In computing, one of the common windowing systems is the X Window system (or X11 or X). The X Window System provides a windowing graphical user interface for Unix and Unix-like operating systems, such as Linux, and remains popular to this day.
The rendering processes for displaying graphics on a computer display in the X Window System were originally designed for earlier generations of hardware. Early graphics hardware allowed application to utilize low level bitwise operations. This allowed applications to easily create simple effects, such as, the drawing and erasing of transient figures using exclusive- or combinations, transparent windows, the pasting of icons onto black fields using inclusive- or, etc. Currently, there is still a large body of application code that utilizes the classic rendering processes provided by the X Window System.
However, modern graphics hardware has moved to a more complex and more general model. Instead of executing single operations at a time, modern graphics processing units (GPUs) have execution pipelines where multiple operations are executed at once. In addition, GPUs no longer provide bitwise operations offered in previous generations of hardware. Instead, GPUs provide more complex arithmetic operations and rendering operations are controlled by an application using “shader programs.” Shader programs can be executed by the GPU, giving much more flexibility in the range of rendering operations available. Unfortunately, the newer generations of GPUs and shader programs are incompatible with the older application base for X Window Systems.
Modern display systems offer increased performance, better graphics quality, and a larger feature set for application programmers. However, for compatibility reasons with the large base of legacy applications, the old bitwise operations need to continue to work as before.
Currently, if a legacy X Window System application is running on newer GPUs, the legacy rendering processes are offloaded from the GPU and returned to the CPU for execution in a software process. Unfortunately, this results in decreased performance. Moreover, the increase in CPU load hurts the interactive performance of the running application.
Accordingly, it would be desirable to provide methods and systems that allow legacy graphics processing to operate efficiently with the newer graphics hardware.